package com.example.sunming.redisLock;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @description: 分布式锁注解
 * @date: 2020/12/11
 * @author: sunming
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface EmLock {

    /**
     * 锁的范围，默认应用级别
     * @return 锁的范围
     */
    LockRangeEnum lockRange() default LockRangeEnum.APPLICATION;

    /**
     * 锁对应的key
     * @return key
     */
    String key();

    /**
     * 锁超时时间
     * @return 时间
     */
    int timeout() default 5;

    /**
     * 锁超时时间粒度
     * @return 粒度
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 是否自动释放锁
     * @return true: 方法完成后，自动释放
     */
    boolean autoRelease() default true;
}
